Neo4j 学习笔记:创建、更新、删除节点/关系/属性

一、创建新节点

1.1 创建无属性的节点

       ➡ keyword: CREATE,句法如下:

(1)创建一个标签的节点:

CREATE(<node_name>:<label_name>)
  • node_name:是指代指节点的名称;
  • label_name:给新节点设置标签,用以区分各种节点的类,如:person, language等;
  • 生成一个有类别标签(如未创建则新添加一个标签)、有指代名的新节点。

   ★ 注意:如该节点已存在,也同样生成新的节点,只是id不同。

(2)创建多个标签的节点,多个标签之间用冒号隔开

CREATE(<node_name>:<label1_name1>:<label2_name2>:...)

         这里,m既是Movie又是Cinema, Film, Picture。

 1.2 创建具有属性的新节点

        ➡ keyword: CREATE,句法如下:

CREATE(<node_name>:<label_name> {
        <property1_name>:<property1_value>,...,
        <propertyn_name>:<propertyn_value>
      )    
  • property1_name:属性1的名称;
  • property1_value:属性1的值;
  • 即,在花括号“{”内列举不同属性的键值对{:},键值对—键值对间用逗号“,”分隔。
  • 生成具有属性1...属性n的新节点。

    ★ 注意:属性的值,属性的值如是字符串string需添加双引号或单引号,如是数据不需添加。

二、更新节点、关系、属性

2.1 在两个现有节点之间创建无/有属性的关系(relationship)

        ➡ keyword: MATCH & CREATE,先使用MATCH命令检索现有的两个节点,再用CREATE命令创建它们之间的新关系。

MATCH (<node1_name>:<nodel1_label_name>,<node2_name>:<nodel2_label_name>)
CREATE (node1_name)-
       [<relationship_name>:<relationship_label_name>{<properties_list>}]- 
       (node2_name)
  • node1_name:节点1的名称;
  • node1_label_name:节点1的标签名;
  • relationship_name:关系的名称;
  • relationship_label_name:关系的标签名。

(1)无属性举例:

    ★ 注意:若没有MATCH的过程,则默认生成的2个节点和关系。

(2)有属性举例,创建具有两个属性的关系

    ★注意:

  • 属性以键值对形式创建,即: property: value;
  • 属性之间用逗号分隔,即:{property1: value1, property2: value2,...} 

★★★注意:

  • 使用CREATE创建关系时,如若MATCH到的节点多于2个,则对所有两两节点创建关系;
  • 每创建一次关系,节点间就多一条关系,即便这些关系都是同一关系;
  • 如MATCH不到对应的两节点,则创建为空。

2.2 向现有节点(关系)添加(更新)属性

关键字:SET,句法如下:

SET <node_name>.<property1_name>,
    <node_name>.<property2_name>,
    ...
    <relation_name>.<property1_name>,
    <relation_name>.<property2_name>,
    ...

  举例1:向节点添加属性。

       给已存在的person类型中名为"Tom Hanks"的节点添加三个新属性:年纪=60,国家=USA,结婚?=Yes。

     ★注意:

  • set可以同时向一个节点添加多个新属性,并用逗号分隔
  • 如某个属性已存在,则set之后属性值被更新;
  • set 后的列表可以是节点的、关系的或者两者混合。 

 举例2:向已有关系的添加属性。

        名为Tom Hanks的节点与某电影节点存在关系"DIRECTED",给这个关系添加新属性:year=2021(这里以date()形式添加,故默认日期为2021-01-01)。

 举例3:同时向节点和关系添加属性。

 

三、删除节点、关系、属性

3.1 删除节点OR关系

关键字:DELETE这里删除节点的前提是该节点独立,即没有与其他节点的关系!句法如下:

//删除节点
MATCH (node_name: node_label_name{property_name:value,...})
DELETE node_name

//删除关系
MATCH (node1_name:node_label_name)-[rel:relationship_name]-(node2_name:node2_label_name)
DELETE rel

举例:

        存在两个节点:node1名为Jennifer(label: person),node2名为Graphs(label:technology),两者之间的关系:rel:node1- LIKES - Graphs。 

         此时,如直接MATCH后删除node1则会出错。

         为此,需MATCH到整个模式,然后同时删除node1和rel。

         上图可见删除成功!

3.2 删除节点和关系

方法一、MATCH模式然后DELETE节点和关系,见上。

方法二、MATCH节点,DETACH DELETE 节点,该方法删除的节点及该节点的所有关系,句法如下:

MATCH(node_name:node_label_name{properties-names-list})
DETACH DELETE node_name

 举例:

       删除节点名为jennifer的节点及其关系(如有多个关系,则会全部删除)。

 3.3 删除属性

 方法一、使用关键字:REMOVE,句法如下:

MATCH(node_name:node_label_name)
REMOVE node_name.property_name 

举例:

       现有一个节点p(label为person,属性为{"name":"Jennifer","birthdate":"1990-01-01"}),现在删除其中的birthdate属性。

方法二、使用SET property.value = null,该方法利用了Neo4j默认null表示不存在的特点。

 举例:上述例子也可以写成:

 

 四、重复问题

       上文提到,CREATE可以创建出两个完全一样的节点(除了neo4j为其分配的id不同)和完全相同的关系,不存在重复创建属性的问题,因为属性以SET赋的最新值为准。

4.1 重复创建节点的问题

        如果需要新节点不重复创建,可使用关键字:MERGE,MERGE先检索数据库中是否有该节点,如有则不重新创建,如没有则创建该节点,句法如下:

MERGE(node_name:node_label_name{properties_list})

        举例:

        如节点node{name:"lily"}不存在,则MERGE之后创建该节点:

   ★注意:

  • 如节点node{name:"lily"}已存在,则MERGE之后不再创建该节点;
  • MERGE节点不需要先MATCH,这与MERGE关系不同(见4.2);
  • 如节点的属性不完全一致,例如待创建节点node{name:"lily", age:27},则MERGE之后仍创建该节点,如下图所示。

 4.2 重复创建关系的问题

        关键字:MATCH+MERGE,句法如下:

MATCH(node1_name:node1_label_name)
MATCH(node2_name:node2_label_name)
MERGE (node1_name)-[rel:relationship_value]-(node2_name)
  •  如node1与node2之间不存在rel关系,则创建该关系;
  • 如node1与node2之间存在rel关系,则不创建该关系;
  • 这里需要先MATCH到两个节点,如果直接用MERGE(node1)-[rel]-(node2),则MERGE的是该模式,而不是关系rel。

        举例:

        已知node1{name:"Jennifer"}是node2{name:"Tom"}的朋友(rel:IS_FRIENDS_WITH},则MERGE(node1)-[rel:IS_FRIENDS_WITH]-(node2)不创建新的关系: 

4.3  MERGE过程中修改或添加属性

在MERGE的两步(MATCH 或 CREATE)过程中,可以对属性进行修改或新增属性,句法如下:

MERGE node1_name:node1_label_name)-[rel:relationship]-(node2_name:node2_label_name)
ON MATCH SET XXX_name.property = value
ON CREATE SET XXX_name.property = value
  •  当MERGE后的模式存在,即仅执行MATCH时,则仅执行ON MATCH SET 语句(不执行ON CREATE SET);
  • 当MERGE后的模式不存在时,即执行CREATE时,则仅ON CREATE SET语句(不执行ON MATCH SET);
  • XXX:可以是Node、Relationship。

        举例:

        现有节点1:person{name:"Jennifer", birthdate:"12/12/1990"} 和 节点2:person{name:"Tom"},关系:(node1)-[rel:IS_FRIENDS_WITH]->(node2),则MERGE该模式后,仅执行ON MATCH SET语句,即:node1被添加新属性{nation:"CHICAGO"}。

 

 

 

 

 

 

 

 

 

 

 

  • 25
    点赞
  • 148
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Neo4j创建属性节点的一般步骤如下: 1. 打开Neo4j浏览器,输入用户名和密码登录。 2. 创建属性节点的标签:在左侧的导航栏中选择“Labels”,然后点击“Create Label”按钮,输入标签名称,如“Person”、“Organization”等。 3. 创建属性节点:在左侧的导航栏中选择“Browser”,然后输入下面的Cypher语句创建属性节点: ``` CREATE (:Person {name: 'Alice', age: 30, city: 'Beijing'}) ``` 上面的语句创建了一个名为“Person”的属性节点,包含了三个属性:姓名为“Alice”,年龄为30岁,城市为“北京”。 4. 查询属性节点:输入下面的Cypher语句查询属性节点: ``` MATCH (p:Person) RETURN p ``` 上面的语句查询了所有拥有“Person”标签的节点,并返回它们的属性。 5. 修改属性节点:输入下面的Cypher语句修改属性节点: ``` MATCH (p:Person {name: 'Alice'}) SET p.age = 31 ``` 上面的语句找到了名为“Alice”的属性节点,并将其年龄修改为31岁。 6. 删除属性节点:输入下面的Cypher语句删除属性节点: ``` MATCH (p:Person {name: 'Alice'}) DELETE p ``` 上面的语句找到了名为“Alice”的属性节点,并将其删除。 以上是在Neo4j创建属性节点的一般步骤和示例代码。在实际应用中,可以根据具体的需求和业务场景,创建不同类型的实体和属性节点,并建立它们之间的关系,以构建更加丰富和有用的知识图谱。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值